基于Arduino IDE 野火ESP8266模块 文件系统LittleFS 的开发 您所在的位置:网站首页 ESP32 Upload Files to LittleFS using Arduino IDE 基于Arduino IDE 野火ESP8266模块 文件系统LittleFS 的开发

基于Arduino IDE 野火ESP8266模块 文件系统LittleFS 的开发

2024-07-13 15:31| 来源: 网络整理| 查看: 265

一、文件系统LittleFS的介绍

 LittleFS是一个为微控制器设计的轻量级、可靠且高性能的文件系统。它专为嵌入式设备打造,拥有占用空间小、对硬件要求低的特点,同时保证在断电情况下数据的完整性和稳定性。 1.设计与特点 LittleFS的设计旨在提供嵌入式系统所需的高效、可靠的文件存储解决方案。它采用日志结构的文件系统设计,确保在突然断电或系统崩溃时数据不会损坏。同时,LittleFS通过磨损均衡算法来延长闪存的使用寿命,这对于使用有限次写入周期的闪存设备来说尤为重要。 2.性能 LittleFS在写入性能方面表现出色,特别是在处理大量小文件时。它的写入速度通常优于许多其他嵌入式文件系统,这使得它成为需要频繁写入操作的嵌入式应用的理想选择。 3. 灵活性 LittleFS非常灵活,可以配置为使用设备的任何部分作为存储。这意味着你可以根据项目的需求选择使用内部闪存、外部SD卡或其他存储设备来存储文件。 4. 兼容性 LittleFS与多种嵌入式开发环境和平台兼容,包括Arduino IDE。这使得它易于集成到各种嵌入式项目中,无论是使用ESP8266还是其他微控制器。 5.使用与集成 使用LittleFS库,你可以通过简单的API调用进行文件的创建、打开、读取、写入和删除等操作。这些API函数提供了直观且易于使用的接口,使得文件操作变得简单而高效。 6.安全性与稳定性 LittleFS注重数据的完整性和安全性。它采用了一系列措施来确保数据的完整性和稳定性,即使在恶劣的嵌入式环境中也能保持可靠的性能。  总的来说,LittleFS是一个强大、可靠且高效的嵌入式文件系统解决方案。它提供了易于使用的API、出色的性能和灵活的配置选项,使得在嵌入式设备上管理文件变得更加简单和高效。无论是用于数据存储、日志记录还是其他文件操作,LittleFS都是一个值得考虑的优秀选择。

二、库文件

需要Arduino IDE中已经安装LittleFS库。

三、代码

初始化LittleFS,代码如下

#include void setup() { Serial.begin(115200); if (!LittleFS.begin()) { Serial.println("LittleFS Mount Failed"); return; } Serial.println("LittleFS Mounted"); // ... 其他初始化代码 ... }

一旦LittleFS被成功挂载,就可以使用它提供的API来创建、读取、写入和删除文件了。 写入文件,代码如下:

void writeToFile(const char *filename, const char *data) { File file = LittleFS.open(filename, FILE_WRITE); if (!file) { Serial.println("Failed to open file for writing"); return; } if (file.print(data)) { Serial.println("File written"); } else { Serial.println("Write failed"); } file.close(); }

读取文件

void readFromFile(const char *filename) { File file = LittleFS.open(filename, FILE_READ); if (!file) { Serial.println("Failed to open file for reading"); return; } Serial.println("Reading file:"); while (file.available()) { Serial.write(file.read()); } file.close(); }

清理和卸载LittleFS 代码结束时,可以选择清理LittleFS占用的资源。在loop()函数的末尾或setup()函数中的某个错误处理路径中完成。

void loop() { // ... 代码 ... } void shutdown() { LittleFS.end(); }

处理存储空间 由于ESP8266的存储空间有限,需要确保不会超出其限制。LittleFS提供了一些API来检查和管理存储空间,比如LittleFS.space() 可以获取剩余空间。

注意事项 1.确保ESP8266有足够的闪存空间来支持LittleFS。 2.注意文件路径和名称的长度,因为嵌入式系统的资源有限。 3.频繁地创建和删除文件可能会降低闪存的使用寿命,所以尽量优化文件操作。 4.如果ESP8266断电或重启,LittleFS通常会保留其状态,建议在关键数据上进行额外的持久性保护。

完整代码如下

#include //#include "FS.h" const char* testPath ="/log.txt"; const char* testInfo ="this is log"; void setup() { Serial.begin(115200); Serial.println(); if (!LittleFS.begin()) { Serial.println("LittleFS Mount Failed"); return; } Serial.println("LittleFS Mounted"); // ... 其他初始化代码 ... writeToFile(testPath,testInfo); readFromFile(testPath); shutdown(); } void writeToFile(const char *filename, const char *data) { File file = LittleFS.open(filename, "w"); if (!file) { Serial.println("Failed to open file for writing"); return; } if (file.print(data)) { Serial.println("File written"); } else { Serial.println("Write failed"); } file.close(); } void readFromFile(const char *filename) { File file = LittleFS.open(filename, "r"); if (!file) { Serial.println("Failed to open file for reading"); return; } Serial.println("Reading file:"); while (file.available()) { Serial.write(file.read()); } file.close(); } void shutdown() { LittleFS.end(); } void loop() { // ... 代码 ... }

运行效果,如下: 在这里插入图片描述

四、综合实验

LittleFS和JSON数据处理

// Example: storing JSON configuration file in flash file system // // Uses ArduinoJson library by Benoit Blanchon. // https://github.com/bblanchon/ArduinoJson // // Created Aug 10, 2015 by Ivan Grokhotkov. // // This example code is in the public domain. #include #include "FS.h" #include // more and possibly updated information can be found at: // https://arduinojson.org/v6/example/config/ bool loadConfig() { File configFile = LittleFS.open("/config.json", "r"); if (!configFile) { Serial.println("Failed to open config file"); return false; } StaticJsonDocument doc; auto error = deserializeJson(doc, configFile); if (error) { Serial.println("Failed to parse config file"); return false; } const char* serverName = doc["serverName"]; const char* accessToken = doc["accessToken"]; // Real world application would store these values in some variables for // later use. Serial.print("Loaded serverName: "); Serial.println(serverName); Serial.print("Loaded accessToken: "); Serial.println(accessToken); return true; } bool saveConfig() { StaticJsonDocument doc; doc["serverName"] = "api.example.com"; doc["accessToken"] = "128du9as8du12eoue8da98h123ueh9h98"; File configFile = LittleFS.open("/config.json", "w"); if (!configFile) { Serial.println("Failed to open config file for writing"); return false; } serializeJson(doc, configFile); return true; } void setup() { Serial.begin(115200); Serial.println(""); delay(1000); Serial.println("Mounting FS..."); if (!LittleFS.begin()) { Serial.println("Failed to mount file system"); return; } if (!saveConfig()) { Serial.println("Failed to save config"); } else { Serial.println("Config saved"); } if (!loadConfig()) { Serial.println("Failed to load config"); } else { Serial.println("Config loaded"); } } void loop() {}

运行效果: 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有